package instrumenter.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtil{


	/** copy one folder and all its subfolders to a destination
	 * @param src the source folder
	 * @param dest the destination folder
	 * @throws IOException if any error
	 *  */
	public static void copyFolder(File src, File dest) throws IOException{
		if(src.isDirectory()){
			//if directory not exists, create it
			if(!dest.exists()){
				dest.mkdir();
				System.out.println("Directory copied from " 
						+ src + "  to " + dest);
			}
			//list all the directory contents
			String files[] = src.list();
			for (String file : files) {
				//construct the src and dest file structure
				File srcFile = new File(src, file);
				File destFile = new File(dest, file);
				//recursive copy
				copyFolder(srcFile,destFile);
			}
		}else{
			//if file, then copy it
			InputStream in = new FileInputStream(src);
			OutputStream out = new FileOutputStream(dest); 
			byte[] buffer = new byte[4096];
			int length;
			//copy the file content in bytes 
			while ((length = in.read(buffer)) > 0){
				out.write(buffer, 0, length);
			}

			in.close();
			out.close();
			System.out.println("File copied from " + src + " to " + dest);
		}
	}


	public static void copyFolder(String path, String string) throws IOException {
		copyFolder(new File(path), new File(string));
	}


	public static void deleteFolder(String path) {
		for(File f : new File(path).listFiles()){
			deleteFolder(f);
		}
		
	}

	private static void deleteFolder(File f) {
		if(f.isDirectory()){
			for(File f2 : f.listFiles()){
				deleteFolder(f2);
			}
		}
		f.delete();
	}	
}